package ongd.negocio.gestion;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * Clase que corresponde con la entidad usuario de la base de datos.
 *
 * @author <a href="mailto:egi0002@alu.ubu.es">Elena García Iglesias</a>
 * @author <a href="mailto:cms0021@alu.ubu.es">Cristina Martínez Sanz</a>
 * @version 1.0 20120124
 *
 */
@Entity
@Table(name = "usuario")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Usuario.findAll", query = "SELECT u FROM Usuario u"),
    @NamedQuery(name = "Usuario.findByIdusuario", query = "SELECT u FROM Usuario u WHERE u.idusuario = :idusuario"),
    @NamedQuery(name = "Usuario.findByNombre", query = "SELECT u FROM Usuario u WHERE u.nombre = :nombre"),
    @NamedQuery(name = "Usuario.findByApellidos", query = "SELECT u FROM Usuario u WHERE u.apellidos = :apellidos"),
    @NamedQuery(name = "Usuario.findByEmail", query = "SELECT u FROM Usuario u WHERE u.email = :email"),
    @NamedQuery(name = "Usuario.findByPassword", query = "SELECT u FROM Usuario u WHERE u.password = :password"),
    @NamedQuery(name = "Usuario.findByActivo", query = "SELECT u FROM Usuario u WHERE u.activo = :activo"),
    @NamedQuery(name = "Usuario.findByAvisos", query = "SELECT u FROM Usuario u WHERE u.avisos = :avisos")})
public class Usuario extends Entidad implements Serializable {

    /**
     * Atributo serialVersionUID.
     */
    private static final long serialVersionUID = 1L;
    /**
     * Atributo que corresponde con la clave primaria.
     */
    @Id
    @Basic(optional = false)
    @Column(name = "idusuario")
    private String idusuario;
    /**
     * Atributo que corresponde con el nombre.
     */
    @Basic(optional = false)
    @Column(name = "Nombre")
    private String nombre;
    /**
     * Atributo que corresponde con los apellidos.
     */
    @Basic(optional = false)
    @Column(name = "Apellidos")
    private String apellidos;
    /**
     * Atributo que corresponde con el email.
     */
    @Column(name = "Email")
    private String email;
    @Basic(optional = false)
    /**
     * Atributo que corresponde con el password.
     */
    @Column(name = "Password")
    private String password;
    /**
     * Atributo que indica si el usuario esta activo.
     */
    @Basic(optional = false)
    @Column(name = "Activo")
    private boolean activo;
    /**
     * Atributo que indica si el usuario permite que le envien avisos.
     */
    @Basic(optional = false)
    @Column(name = "Avisos")
    private boolean avisos;

    /**
     * Constructor de la clase.
     */
    public Usuario() {
    }

    /**
     * Constructor de la clase.
     * @param idusuario Clave primaria
     */
    public Usuario(String idusuario) {
        this.idusuario = idusuario;
    }

    /**
     * Constructor de la clase.
     * @param idusuario Clave primaria
     * @param nombre Nombre del usuario
     * @param apellidos Apellidos del usuario
     * @param password Password del usuario
     * @param activo Activo del usuario
     * @param avisos Avisos del usuario
     */
    public Usuario(String idusuario, String nombre, String apellidos, String password, boolean activo, boolean avisos) {
        this.idusuario = idusuario;
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.password = password;
        this.activo = activo;
        this.avisos = avisos;
    }

    /**
     * Metodo que devuelve el valor de la variable idUsuario.
     * @return idUsuario
     * @see #setIdusuario
     */
    public String getIdusuario() {
        return idusuario;
    }

    /**
     * Metodo que establece el valor de la variable idUsuario.
     * @param idusuario Nuevo valor de la variable
     * @see #getIdusuario
     */
    public void setIdusuario(String idusuario) {
        this.idusuario = idusuario;
    }

    /**
     * Metodo que devuelve el valor de la variable nombre.
     * @return nombre
     * @see #setNombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * Metodo que establece el valor de la variable nombre.
     * @param nombre Nuevo valor de la variable
     * @see #getNombre
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * Metodo que devuelve el valor de la variable apellidos.
     * @return apellidos
     * @see #setApellidos
     */
    public String getApellidos() {
        return apellidos;
    }

    /**
     * Metodo que establece el valor de la variable apellidos.
     * @param apellidos Nuevo valor de la variable
     * @see #getApellidos
     */
    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }

    /**
     * Metodo que devuelve el valor de la variable email.
     * @return email
     * @see #setEmail
     */
    public String getEmail() {
        return email;
    }

    /**
     * Metodo que establece el valor de la variable email.
     * @param email Nuevo valor de la variable
     * @see #getEmail
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * Metodo que devuelve el valor de la variable password.
     * @return password
     * @see #setPassword
     */
    public String getPassword() {
        return password;
    }

    /**
     * Metodo que establece el valor de la variable password.
     * @param password Nuevo valor de la variable
     * @see #getPassword
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * Metodo que devuelve el valor de la variable activo.
     * @return activo
     * @see #setActivo
     */
    public boolean getActivo() {
        return activo;
    }

    /**
     * Metodo que establece el valor de la variable activo.
     * @param activo Nuevo valor de la variable
     * @see #getActivo
     */
    public void setActivo(boolean activo) {
        this.activo = activo;
    }

   /**
     * Metodo que devuelve el valor de la variable avisos.
     * @return avisos
     * @see #setAvisos
     */
    public boolean getAvisos() {
        return avisos;
    }

    /**
     * Metodo que establece el valor de la variable avisos.
     * @param avisos Nuevo valor de la variable
     * @see #getAvisos
     */
    public void setAvisos(boolean avisos) {
        this.avisos = avisos;
    }

    /**
     * Método que devuelve un número con una propiedad fundamental, si dos 
     * objetos son iguales el valor retornado por sus respectivos hashCode 
     * debe ser igual.
     * @return hash
     */
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idusuario != null ? idusuario.hashCode() : 0);
        return hash;
    }

    /**
     * Método que compara si dos usuarios son iguales.
     * @param object Objeto a comparar
     * @return true o false
     */
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Usuario)) {
            return false;
        }
        Usuario other = (Usuario) object;
        if ((this.idusuario == null && other.idusuario != null) || (this.idusuario != null && !this.idusuario.equals(other.idusuario))) {
            return false;
        }
        return true;
    }

    /**
     * Método que devuelve una cadena con usuario.
     * @return string
     */
    @Override
    public String toString() {
        return "ongd.negocio.gestion.Usuario[ idusuario=" + idusuario + " ]";
    }
}
